/*
    XTU OJ: 1289
    by: fifth_light
*/

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

#define MOD 1000000007

int read_digits(int* arr) {
    int ch, len = 0;
    while ((ch = getchar()), ch != EOF && ch != '\n') {
        int digit = ch - '0';
        *(arr++) = digit;
        len++;
    }
    return len;
}

int main(void) {
    int digits[8192] = {0};
    int length;
    while ((length = read_digits(digits)) != 0) {
        // 对于每一个余数，所对应的可能性个数
        int left_num[3] = {0};
        for (int i = 0; i < length; i++) {
            int digit = digits[i];
            if (i == 0) {
                // 要这一位
                left_num[digit % 3] = 1;
                // 不要这一位
                left_num[0]++;
            } else {
                int original[3] = {left_num[0], left_num[1], left_num[2]};
                for (int j = 0; j < 3; j++) {
                    int pos = (j + digit) % 3;
                    // original[pos]：不要这一位
                    // original[j]：要这一位
                    left_num[pos] = (original[pos] + original[j]) % MOD;
                }
                if (digit == 0) {
                    // 去掉一种情况：前面没有数，这种情况余数为0
                    left_num[0]--;
                }
            }
        }
        // 去掉一种情况，即什么数都没加进去
        printf("%d\n", left_num[0] - 1);
    }
    return 0;
}
